package repository

import (
	"fmt"
	"gin-zc/config"
	"gin-zc/model"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var DB *gorm.DB

// InitDB 初始化数据库连接
func InitDB(cfg *config.Config) error {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		cfg.DBUser, cfg.DBPass, cfg.DBHost, cfg.DBPort, cfg.DBName)

	// 1. 根据环境变量确定日志级别
	//var logLevel logger.LogLevel
	//switch cfg.APPEnv { // 假设config.Config中添加了APPEnv字段（从.env的APP_ENV加载）
	//case "dev", "test":
	//	logLevel = logger.Info // 开发/测试环境：打印所有SQL
	//case "prod":
	//	logLevel = logger.Error // 生产环境：只打印错误
	//default:
	//	logLevel = logger.Warn
	//}
	// 1. 配置日志级别和输出规则
	//newLogger := logger.New(
	//	log.New(os.Stdout, "\r\n", log.LstdFlags), // 输出到控制台
	//	logger.Config{
	//		SlowThreshold: time.Second, // 慢查询阈值（超过1秒视为慢查询，会特殊标记）
	//		LogLevel:      logLevel,    // 日志级别：Info=打印所有SQL；Warn=忽略Info；Error=只打印错误
	//		Colorful:      true,        // 彩色输出（开发环境友好）
	//	},
	//)
	//
	//db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
	//	Logger: newLogger, // 启用自定义日志
	//})
	// 使用自定义SQL日志器（写入sql.log）
	sqlLogger := NewSqlLogger()

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: sqlLogger,
	})
	if err != nil {
		return err
	}

	// 自动迁移用户表（仅开发环境，生产环境建议手动建表）
	db.AutoMigrate(&model.User{})

	DB = db
	return nil
}
